//
// Created by wyh on 2025-06-14 16:09.
//
//--短参数--
//无参
//-a
//-b
//-ab 合并参数

//必选参数,只能用空格
//-a 18

//可选参数
//-bjack jack为参数值

//--长参数--
//无参
//--name
//--age

//必选参数
//--name=jack
//--age 18

//可选参数
//--age=18  只能=
#ifndef TEST_UTILITY_OPTION_H
#define TEST_UTILITY_OPTION_H

#include <string>
#include <map>
#include "value.h"

namespace wyh {
    namespace utility {

        class Option
        {
        public:
            enum Type
            {
                OPT_UNKNOWN = 0,
                OPT_NO,
                OPT_REQUIRED,
                OPT_OPTIONAL
            };

            Option() = default;

            ~Option() = default;

            void add(const std::string &opt, Type type);

            Type type(const std::string &opt) const;

            void parse(int argc, char **argv);

            void show() const;

            bool has(const std::string &opt) const;

            Value get(const std::string &opt);

        private:
            std::map<std::string, Type> m_opts;
            std::map<std::string, std::string> m_args;
        };

    } // utility
} // wyh

#endif //TEST_UTILITY_OPTION_H
